<template>
  <div class="system-dic-dialog-container">
    <el-dialog
      :title="state.dialog.title"
      v-model="state.dialog.isShowDialog"
      width="769px"
    >
      <el-form
        ref="dicDialogFormRef"
        :model="state.ruleForm"
        size="default"
        label-width="90px"
      >
        <el-row :gutter="35">
          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
            <el-form-item label="参数名称">
              <el-input
                v-model="state.ruleForm.name"
                placeholder="请输入参数名称"
                clearable
              ></el-input>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
            <el-form-item label="参数标识">
              <el-input
                v-model="state.ruleForm.code"
                placeholder="请输入参数标识"
                clearable
              ></el-input>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
            <el-form-item label="参数类型">
              <el-radio-group v-model="state.ruleForm.param_type">
                <el-radio :label="1">系统</el-radio>
                <el-radio :label="2">用户</el-radio>
              </el-radio-group>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
            <el-form-item label="参数值">
              <el-input
                v-model="state.ruleForm.value"
                placeholder="请输入参数值"
                clearable
              ></el-input>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <template #footer>
        <span class="dialog-footer">
          <el-button @click="onCancel" size="default">取 消</el-button>
          <el-button type="primary" @click="onSubmit" size="default">{{
            state.dialog.submitTxt
          }}</el-button>
        </span>
      </template>
    </el-dialog>
  </div>
</template>

<script setup lang="ts" name="systemDicDialog">
import { reactive, ref, nextTick } from "vue";

import { getAPI } from "/@/utils/axios-utils";
import { PubParamApi } from "/@/api-services/api";
import { PubParamOut } from "/@/api-services/models";

// 定义子组件向父组件传值/事件
const emit = defineEmits(["refresh"]);

// 定义变量内容
const dicDialogFormRef = ref();
const state = reactive({
  ruleForm: {} as PubParamOut,
  dialog: {
    isShowDialog: false,
    type: "",
    title: "",
    submitTxt: "",
  },
});

// 打开弹窗
const openDialog = (type: string, row: PubParamOut) => {
  if (type === "edit") {
    state.ruleForm = row;
    state.dialog.title = "修改参数";
    state.dialog.submitTxt = "修 改";
  } else {
    state.dialog.title = "新增参数";
    state.dialog.submitTxt = "新 增";
    // 清空表单，此项需加表单验证才能使用
    nextTick(() => {
      dicDialogFormRef.value.resetFields();
    });
  }
  state.dialog.isShowDialog = true;
  state.dialog.type = type;
};
// 关闭弹窗
const closeDialog = () => {
  state.dialog.isShowDialog = false;
};
// 取消
const onCancel = () => {
  closeDialog();
};
// 提交
const onSubmit = () => {
  dicDialogFormRef.value.validate(async (valid: boolean) => {
    if (!valid) return;

    if (state.dialog.type == "edit") {
      await getAPI(PubParamApi).pubparamUpdate(state.ruleForm);
    } else {
      await getAPI(PubParamApi).pubparamAdd(state.ruleForm);
    }
    closeDialog();
    emit("refresh");
  });
};

// 暴露变量
defineExpose({
  openDialog,
});
</script>
